package cc.eddic.practice.concurrency;

import lombok.extern.slf4j.Slf4j;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Slf4j
public class OleLogParserTyqImpl implements LogParser {
    @Override
//    旧代码
    public Map<String, List<LogItem>> parse(String folderName) {
        LogItemParserTyqImpl logItemParserTyq = new LogItemParserTyqImpl();
        List<LogItem> logItemList = new ArrayList<>();
        //打开log文件
        // log文件路径：folderNAme
        // 创建File对象
        File file = new File(folderName);
        // 创建FileReader对象
        try {
            FileReader fileReader = new FileReader(file);
            // 创建BufferedReader对象
            BufferedReader reader = new BufferedReader(fileReader);
            // 逐行读取log文件
            String line;
            while ((line = reader.readLine()) != null) {
                // 在此处添加代码，用于解析每一行的内容
                if (logItemParserTyq.parse(line).isPresent()) {
                    LogItem logItem = logItemParserTyq.parse(line).get();
                    logItemList.add(logItem);
                }
            }
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
        Map<String, List<LogItem>> logParser = new HashMap<>();
        logParser.put(folderName, logItemList);
        return logParser;
    }

    //    旧代码
    public Map<String, List<LogItem>> parseDictory(String path) {
        Map<String, List<LogItem>> map = new HashMap<>();
        File file = new File(path);
        // 如果这个路径是文件夹
        if (file.isDirectory()) {
            if (log.isDebugEnabled()) log.debug("读取文件夹：" + file.getPath());
            // 获取路径下的所有文件
            File[] files = file.listFiles();
            if (log.isDebugEnabled()) log.debug("file[]" + files.length);
            for (int i = 0; i < files.length; i++) {
//                if (log.isDebugEnabled()) log.debug("i：" + i);
                // 如果还是文件夹 递归获取里面的文件 文件夹
                if (files[i].isDirectory()) {
                    if (log.isDebugEnabled()) log.debug("读取文件夹：" + files[i].getPath());
                    Map<String, List<LogItem>> dgMap = parseDictory(files[i].getPath());
                    for (String s : dgMap.keySet()) {
                        map.put(s, dgMap.get(s));
                    }
                } else {
                    String logPath = files[i].getName();
                    if (logPath.substring(logPath.length() - 4, logPath.length()).equals(".log")) {
//                        if (log.isDebugEnabled()) log.debug("读取log文件：" + files[i].getPath());
                        List<LogItem> logItemList = parse(files[i].getPath()).get(files[i].getPath());
                        map.put(files[i].getPath(), logItemList);
                    }
                }
            }
        } else {
            String logPath = file.getName();
            if (logPath.substring(logPath.length() - 4, logPath.length()).equals(".log")) {
                List<LogItem> logItemList = parse(file.getPath()).get(file.getPath());
                map.put(file.getPath(), logItemList);
            }
        }
        return map;
    }
}
